HTTPS 机制原理分析
概念
超文本传输安全协议(Hypertext Transfer Protocol Secure,HTTPS) 是一种通过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司在1994年首次提出,随后扩展至互联网上。
HTTPS 顺应时代被发展出来的很大原因在于 HTTP 协议本身的不安全性,即 HTTP 协议传输的内容是不加密的,直接由明文的方式传输,在复杂的网络通信容易被黑客截取,比如中间人攻击等手段。所以在发展 HTTP为前提下,网景公司加入了 SSL(Secure Socket Layer,安全套接字层) ,并在随后的发展过程中,扩展了 TSL(Transport Layer Security,传输层安全),如下所示:
相关术语
在了解 HTTPS 如何在信息传输过程中保证数据的安全性前,需要了解下述的一些术语解释:
- 对称加密
对称加密是指对数据进行加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。对称加密优点在于算法公开,计算量小,加解密效率高,但是其明显的缺点在于若密钥在网络传输过程中被黑客截取,那么黑客就能够正确地解析数据,那么这样就无法保证数据的安全了。
- 非对称加密
非对称加密,与对称加密正好相反,该算法需要两个密钥:公开密钥(public key)和私有密钥(private key)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。其最大的优点在于安全性大大提高,原因在于数据接收方的私钥一般处于不公开的状态,黑客在获取数据的时候,无法通过私钥正确解析数据。那么其缺点,相对于对称加密,在于计算量大,加解密时效率较低。
- 哈希算法
哈希算法是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希算法在 HTTPS 的应用当中起了数据校验和的作用。
- 数字证书
数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。它是一种权威性的电子文档,具有极高的安全性和可依赖性。
- 数字签名
数字签名就是在 HTTPS 验证过程中,用指定的哈希算法将信息进行哈希华后,将所得的值附加在信息后面,用于在数据传输后,方便信息接收端对数据进行校验,确保信息没有被恶意篡改。
过程
图源来自于HTTPS 原理解析 ,这张画的实在太棒了!
客户端首先从发送一个 HTTPS 请求,将自己所支持的加密算法,通知服务器端。
服务器端从客户端发来的加密算法列表中,选出一种加密算法和 HASH 算法,并将其自身的数字证书附加选出的算法一并发回给客户端。而证书中一般包含了网站的地址,公钥,证书失效日期以及证书的颁发机构等等。
客户端在收到服务器端的响应之后,会做一下几件事:
1)验证证书的合法性。一般通过证书的颁发机构是否是合法的、证书是否超过失效日期、证书中所包含的网站地址是否与你正在所访问的相同等方面进行验证。若证书合法,则通过验证,否则将提示用户该证书存在风险。
2)生成随机密码。在证书通过验证,或用户主动信任该证书后,客户端会随机生成一串序列号,并使用服务器端传来的公钥进行加密,并生成握手消息。
3)HASH 算法加密信息。利用服务器端所回传的 HASH 算法将客户端生成的握手信息进行加密,并将加密后的 HASH 值附加上握手消息中,用于数据校验。
服务器端接收到客户端的请求后,同样也会做下面几件事:
1)使用自己的私钥来解密客户端所传来的握手消息,得到客户端生成的随机序列号。在这一部分过程中就运用了非对称加密的技术。
2)使用随机序列号,对握手消息进行 HASH 算法加密,并将获得的 HASH 值与从客户单一并传来的 HASH 值进行对比,查看是否一致。
3)最后,使用该随机序列号,再用公钥加密一段握手消息,并附加上该握手消息的 HASH 值,发回给客户端。
客户端接收到服务器端的请求后,用生成的随机序列号对握手消息进行解密,并对比传来的 HASH 值是否一致。倘若 HASH 值一直,则握手过程正式结束,之后的所有通信将由客户端所生成的随机序列号并利用加密算法对消息进行加密处理。
参考资料